package com.cpems.system.domain.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;

/**
 * 数据查询参数DTO
 * 用于封装数据查询接口的请求参数
 * 
 * @author cpems
 * @date 2025-01-10
 */
@Data
public class DataQueryDto {

    /**
     * 设备ID
     */
    private String clientId;

    /**
     * 设备ID列表（用于批量查询）
     */
    private List<String> clientIds;

    /**
     * 设备编号
     */
    private String equipmentSn;

    /**
     * 能源类型（0：电，1：水）
     */
    private String energyType;

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;

    /**
     * 查询类型（voltage：电压，current：电流，power：功率，energy：用电量，all：全部）
     */
    private String queryType;

    /**
     * 是否只查询最新数据
     */
    private Boolean latestOnly = false;

    /**
     * 分页大小（默认100）
     */
    private Integer pageSize = 100;

    /**
     * 页码（默认1）
     */
    private Integer pageNum = 1;

    /**
     * 排序字段（默认按创建时间倒序）
     */
    private String orderBy = "createTime";

    /**
     * 排序方向（asc：升序，desc：降序，默认降序）
     */
    private String orderDirection = "desc";

    /**
     * 数据保留天数（用于清理过期数据）
     */
    private Integer daysToKeep;

    /**
     * 设备在线超时时间（分钟）
     */
    private Integer timeoutMinutes = 10;

    /**
     * 是否包含统计信息
     */
    private Boolean includeStatistics = false;

    /**
     * 数据值范围过滤 - 最小值
     */
    private Double minValue;

    /**
     * 数据值范围过滤 - 最大值
     */
    private Double maxValue;

    /**
     * 时间聚合类型（hour：按小时，day：按天，month：按月）
     */
    private String aggregationType;

    /**
     * 是否需要实时数据
     */
    private Boolean realTime = false;

    /**
     * 数据格式（json：JSON格式，csv：CSV格式）
     */
    private String format = "json";
}